package com.br.venda;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;

import com.br.produto.Produto;
public class VendaDAOHibernate implements VendaDAO{

	  private Session sessao;

      public Session getSessao() {
              return sessao;
      }

      public void setSessao(Session sessao) {
              this.sessao = sessao;
      }

      @Override
      public void registra(Venda venda) {
              this.sessao.save(venda);

      }

      @SuppressWarnings("unchecked")
      @Override
      public java.util.List<Venda> getLista() {
              Criteria lista = sessao.createCriteria(Venda.class);
              return lista.list();
      }

      @Override
      public void excluir(Venda venda) {
              this.sessao.delete(venda);
      }

      @Override
      public boolean existeEstoqueProduto(Produto produto) {

              Produto produtoPesquisado = (Produto) this.sessao.get(Produto.class,
                              produto.getId());

              if (produtoPesquisado != null) {
                      if (produtoPesquisado.getEstoque() > 0) {
                              return true;
                      }
              }

              return false;

      }

      @Override
      public void reduzEstoqueProduto(Produto produto) {
              String hql = "update Produto p set p.estoque =:novoEstoque where p.id =:idProduto";
              Query query = sessao.createQuery(hql);
              query.setInteger("novoEstoque", produto.getEstoque() - 1);
              query.setLong("idProduto", produto.getId());
              query.executeUpdate();

      }


}
